Programmation Client II¶

Des choses¶

Les fonctions flèchères!¶

Préambule¶

  • Il y a aucun nom plus cool que "fonction fléchère"

  • Le point ci-haut est un fait, non une opignon. Ce sera à l'examen à coup sûr.

Context...¶

En javascript, une fonction est une valeur. On dit qu'en javascript, les fonctions sont "first class citizen". C'est à dire que fonction peut recevoir et retourner une fonction.

Exemple de fonction qui prenne une fonction:¶

function map(lst, fn){
    const ret = [];
    for(const e of lst){
        ret.push(fn(e));
    }
    return ret;
}

console.log(map([0, 1, 2, 3, 4, 5], multiplyBy2); // [0, 2, 4, 6, 8, 10]

Des fois, on ne veut pas nommer une fonction...¶

console.log(map([0, 1, 2, 3, 4, 5], function(x){
    return 2 * x;
});   // [0, 2, 4, 6, 8, 10]
  • Une fonction sans nom est une lambda

Les lambdas devraient être courtes et façile à écrire¶

console.log(map([0, 1, 2, 3, 4, 5], (x) => 2 * x);   // [0, 2, 4, 6, 8, 10]
  • Première utilisation de fonction fléchère

  • Les fonctions fléchères sont la manière que javascript utilise pour implémenter les lambdas.

  • En anglais, fonctions fléchères est "(fat) arrow function"

Exemples de fonctions fléchères...¶

const calculDeTax = (prix) => 1.15 * prix
const firstLetterInCapital = (word) => word.charAt(0).toUpperCase();
const isId = (word) => word.charAt(0).length ===10 && word.charAt(0).toUpperCase() === "X" ;
  • Les fonctions fléchères n'utilisent pas le mot return car elles calcullent une seule chose!

Fonction fléchères de plusieurs lignes¶

const getIdTyp = (word) => {
    if(word.startsWith("x")){
        return "id";
    }
    return "invalid"
}
  • une fonction fléchère multilignes doit utiliser le mot "return"!

Où utilisez les fonctions flèchères?¶

Les lambdas servent surtout à deux choses¶

  1. recevoir des fonctions en arguments

  2. retourner des fonctions de fonctions

Map - exemple¶

const lst = [0,1,2,3,4]
lst.map((n) => n % 2).map((x) => {
    if (x == 0) {
        return "pair"
    } else {
        return "impair"
    }
}) // ["pair", "impair", "pair", "impair", "pair"]
  • La fonction map d'une liste créer un nouvelle list en appliquant la fonction à chaque élément de la liste

Function map¶

  • map est un cas particulier d'une loop
  • map est très utilisé dans les languages fonctionnels

Filter - exemple¶

const lst = [0,1,2,3,4]
lst.filter((n) => n % 2) // [0, 2, 4]
  • Une fonction qui retourne un boolean est nommé un prédicat
  • La fonction filter d'une liste créer un nouvelle list comprenant seulement les élément où le prédicat à retourner true

Function filter¶

  • filter est un (autre) cas particulier d'une loop
  • filter est très utilisé dans les languages fonctionnels

Méthodes intéressantes sur les arrays¶

find Trouve le premier element de la liste qui match le préficat doc
filter Trouve tous les elements de la liste qui match le préficat doc
map Convertie tous les éléments d'une liste en applicant la fonction doc
reduce Humm.. une boucle fonctionnelle doc

Méthodes stupides sur les arrays¶

forEach Loop sur l'array doc
  • On ne veut pas ça, on est mieux d'utiliser une loop

Exercices¶

Exo 1¶

En utilisant map, filter et les fonctions fléchères, extraires tous les noms qui où le nom de famille commence par la letter A.

  • Andrea Bocelli
  • André Bouchart
  • Brutus Allarie
  • Cédric Cédric
  • Yves Allaoui
  • Robert Rivard
  • Sasha Andreivich Popov
  • Taniia Andreivicha Ankalaeva